home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1996-01-26 | 3.7 KB | 111 lines |
- ' AMOSPRO
- '
- ' ********************************************************
- ' *** ***
- ' *** Screen Saver ***
- ' *** ***
- ' *** by ***
- ' *** ***
- ' *** Joseph Bolin ***
- ' *** ***
- ' ********************************************************
-
- Screen Open 0,320,200,2,Lowres
- Curs Off : Paper 0 : Pen 1
-
- Do
- If Inkey$<>"" Then RESET=1 Else RESET=0
- _SCREENSAVER[120,RESET]
- Print At(0,0);"Number of jiffies:";_SAVERLENGTH;" "
- Loop
-
- Procedure _SCREENSAVER[_TIME,RESET]
-
- ' Use: Call this procedure in the main loop
- '
- ' Inputs: _TIME Number of jiffies before blanking
- ' RESET If non-zero, counter before blanking will be reset
- '
- ' Outputs: When screen is blanked _SCREENBLANK procedure is called
- ' _SAVERLAST =Last time since last mouse movement or key press
- ' _SAVERLENGTH =Length since last mouse movement or key press
- ' _SAVERX,_SAVERY=Last mouse position
- ' Param =-1 if screen blanked, 0 if screen not blanked
- '
- ' Note: This procedure does not check keypresses, so you should set
- ' the parameter RESET when a key is pressed
-
- Shared _SAVERLAST,_SAVERLENGTH,_SAVERX,_SAVERY
- If RESET Then _SAVERLAST=Timer
- If _SAVERLAST=0 Then _SAVERLAST=Timer
- _SAVERLENGTH=0
- X=X Mouse : If X<>_SAVERX Then _SAVERX=X : _SAVERLAST=Timer : Pop Proc[1]
- Y=Y Mouse : If Y<>_SAVERY Then _SAVERY=Y : _SAVERLAST=Timer : Pop Proc[1]
- If Mouse Key>0 Then _SAVERLAST=Timer : Pop Proc[1]
- _SAVERLENGTH=Timer-_SAVERLAST
- If _SAVERLENGTH<_TIME Then Pop Proc[0]
- _SCREENBLANK
- _SAVERLAST=Timer : _SAVERLENGTH=0
- End Proc[-1]
- Procedure _SCREENBLANK
- ' Input: None
- ' Output: With a unopened screen and 100+ K ram, a screen will be
- ' opened with a bouncing lines animation
- ' With all screens open or less than 100 K free, the current
- ' screen will be hidden
-
- Shared _SAVERX,_SAVERY
- If Chip Free+Fast Free<100000 Then Goto LOWMEM
- _SCREEN=Screen
- For S=0 To 7
- Trap Screen S : If Errtrap=47 Then Exit
- Next
- If S=8 Then Goto LOWMEM
- YMAX=256+56*Ntsc
- Screen Open S,320,YMAX,16,Lowres
- Flash Off : Curs Off
- Hide : Cls 0
- Wait Vbl
- For I=1 To 8
- Colour I,I*$222-$111
- Next I
- Dim X1(128),Y1(128),X2(128),Y2(128)
- Dim N(16)
- X1(1)=Rnd(320) : Y1(1)=Rnd(YMAX)
- X2(1)=Rnd(320) : Y2(1)=Rnd(YMAX)
- Repeat
- VX1=(Rnd(4)-2)*2
- Until VX1<>0
- Repeat
- VY1=(Rnd(4)-2)*2
- Until VY1<>0
- Repeat
- VX2=(Rnd(4)-2)*2
- Until VX2<>0
- Repeat
- VY2=(Rnd(4)-2)*2
- Until VY2<>0
- N=8 : T=1
- Repeat
- Ink 0 : Draw X1(N),Y1(N) To X2(N),Y2(N)
- For I=N To 2 Step -1
- X1(I)=X1(I-1) : Y1(I)=Y1(I-1)
- X2(I)=X2(I-1) : Y2(I)=Y2(I-1)
- Ink I : Draw X1(I),Y1(I) To X2(I),Y2(I)
- Next I
- Add X1(1),VX1 : If X1(1)<0 or X1(1)>320 : VX1=-VX1 : End If
- Add Y1(1),VY1 : If Y1(1)<0 or Y1(1)>YMAX : VY1=-VY1 : End If
- Add X2(1),VX2 : If X2(1)<0 or X2(1)>320 : VX2=-VX2 : End If
- Add Y2(1),VY2 : If Y2(1)<0 or Y2(1)>YMAX : VY2=-VY2 : End If
- Ink 1 : Draw X1(1),Y1(1) To X2(1),Y2(1)
- Until Mouse Key>0 or Inkey$<>"" or X Mouse<>_SAVERX or Y Mouse<>_SAVERY
- Screen Close S
- Screen _SCREEN
- Pop Proc
-
- LOWMEM:
- Screen Hide
- Repeat
- Until Mouse Key>0 or Inkey$<>"" or X Mouse<>_SAVERX or Y Mouse<>_SAVERY
- Screen Show
- End Proc